

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>PYTHON编程：从入门到实践（学习笔记） - cxp&#39;s blog</title>
  <meta name="apple-mobile-web-app-capable" content="yes" />
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <meta name="google" content="notranslate" />

  
  
  <meta name="description" content=" Python基础
 一、安装
1、版本v2.x  v..."> 
  
  <meta name="author" content="Alex"> 

  
    <link rel="icon" href="/images/icons/favicon-16x16.png" type="image/png" sizes="16x16">
  
  
    <link rel="icon" href="/images/icons/favicon-32x32.png" type="image/png" sizes="32x32">
  
  
    <link rel="apple-touch-icon" href="/images/icons/apple-touch-icon.png" sizes="180x180">
  
  
    <meta rel="mask-icon" href="/images/icons/stun-logo.svg" color="#333333">
  
  
    <meta rel="msapplication-TileImage" content="/images/icons/favicon-144x144.png">
    <meta rel="msapplication-TileColor" content="#000000">
  

  <link rel="stylesheet" href="/css/style.css">

  
  <link rel="stylesheet" href="//at.alicdn.com/t/font_1445822_h1619vhl1nr.css">
  

  
  
  <link rel="stylesheet" href="https://cdn.bootcss.com/fancybox/3.5.7/jquery.fancybox.min.css">
  

  
  
  <link rel="stylesheet" href="https://cdn.bootcss.com/highlight.js/9.18.1/styles/xcode.min.css">
  

  <script>
    var CONFIG = window.CONFIG || {};
    var ZHAOO = window.ZHAOO || {};
    CONFIG = {
      isHome: false,
      fancybox: true,
      pjax: false,
      lazyload: {
        enable: true,
        loadingImage: '',
      },
      donate: {
        enable: true,
        alipay: 'https://pic.izhaoo.com/alipay.jpg',
        wechat: 'https://pic.izhaoo.com/wechat.jpg'
      },
      motto: {
        api: '',
        default: '我在开了灯的床头下，想问问自己的心啊。'
      },
      galleries: {
        enable: true
      },
      fab: {
        enable: true,
        alwaysShow: false
      },
      carrier: {
        enable: true
      },
      daovoice: {
        enable: true
      }
    }
  </script>

  

  
<link rel="alternate" href="/atom.xml" title="cxp's blog" type="application/atom+xml">
</head>
<body class="lock-screen">
  <div class="loading"></div>
  


<nav class="navbar">
  <div class="left"></div>
  <div class="center">PYTHON编程：从入门到实践（学习笔记）</div>
  <div class="right">
    <i class="iconfont iconmenu j-navbar-menu"></i>
  </div>
</nav>

  <nav class="menu">
  <div class="menu-wrap">
    <div class="menu-close">
      <i class="iconfont iconbaseline-close-px"></i>
    </div>
    <ul class="menu-content">
      
      
      
      
      <li class="menu-item"><a href="/ " class="underline"> 首页</a></li>
      
      
      
      
      <li class="menu-item"><a href="/galleries " class="underline"> 摄影</a></li>
      
      
      
      
      <li class="menu-item"><a href="/archives " class="underline"> 归档</a></li>
      
      
      
      
      <li class="menu-item"><a href="/tags " class="underline"> 标签</a></li>
      
      
      
      
      <li class="menu-item"><a href="/categories " class="underline"> 分类</a></li>
      
      
      
      
      <li class="menu-item"><a href="/about " class="underline"> 关于</a></li>
      
    </ul>
    <div class="menu-copyright"><p>Powered by <a target="_blank" href="https://hexo.io">Hexo</a>  |  Theme - <a target="_blank" href="https://github.com/izhaoo/hexo-theme-zhaoo">zhaoo</a></p></div>
  </div>
</nav>
  <main id="main">
  <div class="container" id="container">
    <article class="article">
  <div class="wrap">
    <section class="head">
  <img   class="lazyload" data-original="/images/theme/post-image.jpg" src=""  draggable="false">
  <div class="head-mask">
    <h1 class="head-title">PYTHON编程：从入门到实践（学习笔记）</h1>
    <div class="head-info">
      <span class="post-info-item"><i class="iconfont iconcalendar"></i>三月 16, 2019</span
        class="post-info-item">
      
      <span class="post-info-item"><i class="iconfont iconfont-size"></i>6417</span>
    </div>
  </div>
</section>
    <section class="main">
      <section class="content">
        <h1 id="python基础"><a class="markdownIt-Anchor" href="#python基础"></a> Python基础</h1>
<h2 id="一-安装"><a class="markdownIt-Anchor" href="#一-安装"></a> 一、安装</h2>
<pre><code>1、版本v2.x  v3.x
2、操作系统LINUX、WINDOWS、MAC OS
3、管理工具安装anaconda、操作命令安装
</code></pre>
<h2 id="二-变量和简单数据类型"><a class="markdownIt-Anchor" href="#二-变量和简单数据类型"></a> 二、变量和简单数据类型</h2>
<h3 id="21变量"><a class="markdownIt-Anchor" href="#21变量"></a> 2.1变量</h3>
<p>用来保存存储的内容</p>
<h3 id="22字符串"><a class="markdownIt-Anchor" href="#22字符串"></a> 2.2字符串</h3>
<blockquote>
<p>一系列字符。</p>
</blockquote>
<ul>
<li>
<p>创建字符串“”</p>
</li>
<li>
<p>capitalize():首字母大写string.capitalize()-----&gt;String</p>
</li>
<li>
<p>center():居中，参数添加显示字符宽度</p>
</li>
<li>
<p>chr()</p>
</li>
<li>
<p>cmp()</p>
</li>
<li>
<p>count()计数</p>
</li>
<li>
<p>decode()解码</p>
</li>
<li>
<p>encode()编码</p>
</li>
<li>
<p>endswith()判断是否以某段字符结尾</p>
</li>
<li>
<p>expandtabs()</p>
</li>
<li>
<p>find()查找字符串中的位置，返回第一个查找到的下标</p>
</li>
<li>
<p>format()格式化字符串</p>
</li>
<li>
<p>hex()</p>
</li>
<li>
<p>index()返回索引值</p>
</li>
<li>
<p>isalnum()</p>
</li>
<li>
<p>isalpha</p>
</li>
<li>
<p>isdecimal()</p>
</li>
<li>
<p>isdigit()</p>
</li>
<li>
<p>islower()</p>
</li>
<li>
<p>isnumeric()</p>
</li>
<li>
<p>isspace()</p>
</li>
<li>
<p>istitle()是否首字母大写</p>
</li>
<li>
<p>isupper()是否全部大写</p>
</li>
<li>
<p>join()连接</p>
</li>
<li>
<p>len()计算出长度</p>
</li>
<li>
<p>list()转换为字符串</p>
</li>
<li>
<p>ljust()左对齐，传入参数表示显示字符宽度</p>
</li>
<li>
<p>lower()将所有大写变为小写</p>
</li>
<li>
<p>lstrip()去掉左边空格</p>
</li>
<li>
<p>max()</p>
</li>
<li>
<p>min()</p>
</li>
<li>
<p>oct()</p>
</li>
<li>
<p>ord()</p>
</li>
<li>
<p>partition()以参数中的字符分区</p>
</li>
<li>
<p>replace()</p>
</li>
<li>
<p>repr()</p>
</li>
<li>
<p>rfind()从左边查找，返回下标索引</p>
</li>
<li>
<p>rindex()</p>
</li>
<li>
<p>rjust()右对齐</p>
</li>
<li>
<p>rpartition()从右边开始查找分区的字符</p>
</li>
<li>
<p>rsplit()拆分字符</p>
</li>
<li>
<p>rstrip()</p>
</li>
<li>
<p>split()</p>
</li>
<li>
<p>splitlines()</p>
</li>
<li>
<p>startswith()</p>
</li>
<li>
<p>str()</p>
</li>
<li>
<p>strip()</p>
</li>
<li>
<p>swapcase()</p>
</li>
<li>
<p>translate()</p>
</li>
<li>
<p>tuple()</p>
</li>
<li>
<p>type()</p>
</li>
<li>
<p>upper()</p>
</li>
<li>
<p>zfill()填充0</p>
</li>
<li>
<p>合并拼接字符串：可以使用+</p>
</li>
<li>
<p>使用制表符\t和换行符\n</p>
</li>
<li>
<p>删除空白：rstrip()、lstrip()、strip()</p>
</li>
<li>
<p>要注意’’ 和 `的区别 如果在一起使用的话可以从trackback中看到错误信息</p>
</li>
</ul>
<h3 id="23数字"><a class="markdownIt-Anchor" href="#23数字"></a> 2.3数字</h3>
<p>加减乘除、乘方运算(**)、取余%</p>
<ul>
<li>整数： ±*/  注意地板除(//)向下取整</li>
<li>浮点数：</li>
<li>使用str()来避免类型错误</li>
</ul>
<h3 id="24注释"><a class="markdownIt-Anchor" href="#24注释"></a> 2.4注释</h3>
<blockquote>
<p>使用注释的目的是阐述代码要做什么</p>
</blockquote>
<ul>
<li>使用#</li>
<li>python之禅：import this</li>
</ul>
<h2 id="三-列表"><a class="markdownIt-Anchor" href="#三-列表"></a> 三、列表</h2>
<blockquote>
<p>由一系列特定顺序的元素组成，用[]来表示列表。元素用逗号隔开，</p>
</blockquote>
<h3 id="31访问列表"><a class="markdownIt-Anchor" href="#31访问列表"></a> 3.1访问列表</h3>
<ul>
<li>
<p>列表是有序集合，用索引值即可，<strong>索引值从0开始</strong></p>
</li>
<li>
<p>可以使用负数索引：</p>
<p>a=[1,2,3,4]<br />
a[-1]<br />
4</p>
</li>
</ul>
<h3 id="32修改-添加-删除列表元素"><a class="markdownIt-Anchor" href="#32修改-添加-删除列表元素"></a> 3.2修改、添加、删除列表元素</h3>
<ul>
<li>修改：使用列表名和索引值修改</li>
<li>增加：append()、insert(position， value)</li>
<li>删除：del()、pop()、remove()，两者的区别是第二种方法可以返回删除的元素，pop(index)可以弹出指定的值。其中remove只删除第一个指定的值</li>
</ul>
<h3 id="33组织列表"><a class="markdownIt-Anchor" href="#33组织列表"></a> 3.3组织列表</h3>
<ul>
<li>排序sort(),永久性修改。可以通过修改reverse=True反向排序</li>
<li>排序sorted(),临时性修改。可以通过修改reverse=True反向排序</li>
<li>反转reverse()，注意不是排序</li>
<li>len()</li>
</ul>
<h3 id="34每当访问最后一个元素的时候都是用索引值-1"><a class="markdownIt-Anchor" href="#34每当访问最后一个元素的时候都是用索引值-1"></a> 3.4每当访问最后一个元素的时候都是用索引值-1</h3>
<h2 id="四-操作列表"><a class="markdownIt-Anchor" href="#四-操作列表"></a> 四、操作列表</h2>
<h3 id="41遍历列表"><a class="markdownIt-Anchor" href="#41遍历列表"></a> 4.1遍历列表</h3>
<blockquote>
<p>使用for循环，循环是计算机自动完成重复工作的常见方式之一</p>
</blockquote>
<p><strong>for in ：</strong><br />
这时候接触到代码块了，要注意代码块的缩进规则</p>
<h3 id="42创建数值列表"><a class="markdownIt-Anchor" href="#42创建数值列表"></a> 4.2创建数值列表</h3>
<ul>
<li>使用range(start, end, steps)产生一系列数字</li>
<li>使用list()将range()产生的数字转成列表</li>
</ul>
<h3 id="43简单统计计算"><a class="markdownIt-Anchor" href="#43简单统计计算"></a> 4.3简单统计计算</h3>
<ul>
<li>max()</li>
<li>min()</li>
<li>sum()</li>
</ul>
<h3 id="44列表解析"><a class="markdownIt-Anchor" href="#44列表解析"></a> 4.4列表解析</h3>
<blockquote>
<p>只需要一行代码就可以产生列表结构为：类似为[i for i in range(1,11)]</p>
</blockquote>
<h3 id="45切片"><a class="markdownIt-Anchor" href="#45切片"></a> 4.5切片</h3>
<blockquote>
<p>大体的索引结构为：[start🔚step]</p>
</blockquote>
<p>可以通过切片来复制列表为一个新的列表[:]</p>
<h3 id="46元组tuple"><a class="markdownIt-Anchor" href="#46元组tuple"></a> 4.6元组tuple</h3>
<blockquote>
<p>不可变的列表，用（）来表示，不可修改</p>
</blockquote>
<h3 id="47集合"><a class="markdownIt-Anchor" href="#47集合"></a> 4.7集合</h3>
<blockquote>
<p>集合可以用来去掉重复的列表数据</p>
</blockquote>
<p>集合的操作：交、并、差、是否为子集</p>
<ul>
<li>set.add(obj)添加操作</li>
<li>set.remove(obj)删除,若不存在则抛出异常</li>
<li>set.discard(obj)删除，相对于remove()它不会抛出异常。</li>
<li>set.pop()弹出，返回任意的值，所以并不能用来获取弹出的值</li>
<li>set.clear()清除集合</li>
</ul>
<h3 id="48pep8"><a class="markdownIt-Anchor" href="#48pep8"></a> 4.8PEP8</h3>
<p>编码规则：</p>
<ul>
<li>缩进：主要不要混用制表键和空格，使用编辑器应该设置好制表键与空格的关系字符</li>
<li>行长：不超过80个,编辑器中可以设置视觉线。</li>
</ul>
<h2 id="五-条件语句"><a class="markdownIt-Anchor" href="#五-条件语句"></a> 五、条件语句</h2>
<blockquote>
<p>根据条件来进行选择什么样的措施</p>
</blockquote>
<h3 id="51条件测试"><a class="markdownIt-Anchor" href="#51条件测试"></a> 5.1条件测试</h3>
<p>检查的标准是条件表达式返回的是True还是False，进而来判断是否执行相应语句</p>
<blockquote>
<p>=赋值 ==是检查是否相等  ！=不相等<br />
检查多个条件用and或者or<br />
检查是否在结构中用in或者not in</p>
</blockquote>
<h3 id="52if语句"><a class="markdownIt-Anchor" href="#52if语句"></a> 5.2if语句</h3>
<pre><code>if condition ：
	pass
elif condition：
else：
</code></pre>
<h3 id="53if语句的用处"><a class="markdownIt-Anchor" href="#53if语句的用处"></a> 5.3if语句的用处：</h3>
<ul>
<li>检测异常值，符合异常条件的数据</li>
<li>判断列表是不是空的</li>
</ul>
<p><strong>注意在使用比价运算符时PEP8提供建议是在运算符号两边添加空格，方便阅读</strong></p>
<h2 id="六-字典"><a class="markdownIt-Anchor" href="#六-字典"></a> 六、字典</h2>
<blockquote>
<p>字典是一系列键-值对  用{}表示</p>
</blockquote>
<h3 id="61使用字典"><a class="markdownIt-Anchor" href="#61使用字典"></a> 6.1使用字典</h3>
<ul>
<li>通过键来访问value</li>
<li>因为字典是一种动态的结构可以随时的添加键值对，是可变的对象，python不关心键值对的添加顺序，只关心相互关系</li>
<li>修改字典中的value是通过key来修改</li>
<li>删除，del, 同修改</li>
<li>字典的键必须是不可变类型</li>
<li>清空字典dict.clear()</li>
<li>dict.formkeys(seq,val=None)创建并初始化键值的字典。</li>
</ul>
<p><strong>在定义好字典时候最好在最后一个键值对后再添加一个逗号，为下一对键值对插入做准备</strong></p>
<h3 id="62遍历字典"><a class="markdownIt-Anchor" href="#62遍历字典"></a> 6.2遍历字典</h3>
<ul>
<li>遍历键值对   item()返回键、值</li>
<li>遍历键keys()或者值 values()</li>
<li>遍历时考虑顺序遍历的话可以使用sorted()函数来进行对keys排序</li>
<li>遍历值得时考虑重复数据可以使用set做一个转换消除重复值</li>
</ul>
<h3 id="63嵌套"><a class="markdownIt-Anchor" href="#63嵌套"></a> 6.3嵌套</h3>
<blockquote>
<p>{[]}、[{}].但是在字典中存储列表只能作为value存储</p>
</blockquote>
<h3 id="64字典类型内置方法"><a class="markdownIt-Anchor" href="#64字典类型内置方法"></a> 6.4字典类型内置方法</h3>
<ul>
<li>dict.clear()清空字典</li>
<li>dict.copy()浅拷贝字典</li>
<li>dict.fromkeys(seq，default=None)，创建一个字典，seq是key，并初始化values为默认值。</li>
<li>dict.has_key()判断dict中是否有key</li>
<li>dict.items()，返回元组列表</li>
<li>dict.keys()</li>
<li>dict.values()</li>
<li>dict.pop()同get，不过是返回并删除</li>
<li>dict.get(key，default=None)返回key对应的值，如果没有在dict中的话返回默认值</li>
<li>dict.setdefault(key,default=None)</li>
<li>dict.update(dict2)将dict中的键值加入到dict中，并且更新原字典。</li>
</ul>
<h2 id="七-检测用户输入和while循环"><a class="markdownIt-Anchor" href="#七-检测用户输入和while循环"></a> 七、检测用户输入和while循环</h2>
<blockquote>
<p>input(info):让程序暂停，等待用户输入一些文本，其中info为提示信息。同样在python2.7中使用raw_input()<br />
while用来不断检测</p>
</blockquote>
<p><strong>input函数没什么可说的就是使用用户输入数据时要注意做类型的变换</strong></p>
<h3 id="71标志"><a class="markdownIt-Anchor" href="#71标志"></a> 7.1标志</h3>
<p>对于while，为了使用简单，当条件比较多的时候，可以通过设置标志来判断是否结束循环。</p>
<h3 id="72break"><a class="markdownIt-Anchor" href="#72break"></a> 7.2break</h3>
<p>break用来控制程序，退出循环程序，不在执行剩余代码。</p>
<h3 id="73continue"><a class="markdownIt-Anchor" href="#73continue"></a> 7.3continue</h3>
<p>continue用来控制程序流程，退出当次循环不在进行一下代码，直接跳到下一循环。</p>
<h2 id="八-函数"><a class="markdownIt-Anchor" href="#八-函数"></a> 八、函数</h2>
<blockquote>
<p>函数是带有名字的代码块。用来完成特定的功能。</p>
</blockquote>
<h3 id="81参数"><a class="markdownIt-Anchor" href="#81参数"></a> 8.1参数</h3>
<ul>
<li>实参：函数调用过程中传递进去的参数</li>
<li>形参：函数定义中的参数</li>
</ul>
<h3 id="82传递参数"><a class="markdownIt-Anchor" href="#82传递参数"></a> 8.2传递参数</h3>
<ul>
<li>位置实参：实参与形参位置相同</li>
<li>关键字实参：实参由变量和值组成</li>
<li>使用字典和列表：</li>
<li>函数定义中使用默认值时，要是不传进去实参，函数将会使用默认值</li>
<li>传参方式可以混合使用</li>
</ul>
<h3 id="83返回值"><a class="markdownIt-Anchor" href="#83返回值"></a> 8.3返回值</h3>
<blockquote>
<p>返回值可以简化主程序，将大量的工作放在函数中，使用return返回函数的运算结果。<br />
让参数变成可选的在函数定义时设置为空，可以扩展函数的适用范围。</p>
</blockquote>
<h3 id="84传递任意数量的实参"><a class="markdownIt-Anchor" href="#84传递任意数量的实参"></a> 8.4传递任意数量的实参</h3>
<ul>
<li>*args</li>
</ul>
<h3 id="85将函数存储在模块中"><a class="markdownIt-Anchor" href="#85将函数存储在模块中"></a> 8.5将函数存储在模块中</h3>
<blockquote>
<p>使用module_name.function_name()来调用模块中的函数<br />
模块</p>
</blockquote>
<h3 id="86注意事项"><a class="markdownIt-Anchor" href="#86注意事项"></a> 8.6注意事项</h3>
<p>编写函数时应该注意到，函数名字尽量使用小写字母和下划线，名字要容易解释功能，另外要包含阐述函数功能的注释。</p>
<h2 id="九-类"><a class="markdownIt-Anchor" href="#九-类"></a> 九、类</h2>
<blockquote>
<p>面对对象编程是最有效的软件编写方法之一，根据类来创建对象，类中定义的是一类对象都有的通用的行为，可以根据对象赋予不同的个性行为。类是用来描述具有同类属性实例的概括词汇，对象是类实例化的个体。Python中类即对象</p>
</blockquote>
<p>面对对象设计的三大特性：</p>
<ul>
<li>封装</li>
<li>继承</li>
<li>多态</li>
</ul>
<h3 id="91创建使用类"><a class="markdownIt-Anchor" href="#91创建使用类"></a> 9.1创建使用类：</h3>
<pre><code>class A(object):
	def __init__(self, *xxx)：
		pass
	def a(*xxx):
		pass
	...
</code></pre>
<p><em>一般在Python中首字母大写的是类</em></p>
<p>类中包含<strong>方法（类中的函数）、属性</strong>，<strong>init</strong>()中形参必不可少必须位于其他参数之前在python创建实例的时候，将自动传给self，它是一个指定实例本身的引用。以self为前缀的类中的变量都可以被类中其他方法使用。</p>
<p>使用句点表示法使用类中属性和调用类中方法**.**</p>
<h3 id="92修改属性的值"><a class="markdownIt-Anchor" href="#92修改属性的值"></a> 9.2修改属性的值</h3>
<ul>
<li>直接修改，使用实例访问</li>
<li>通过方法修改属性的值</li>
<li>通过方法对属性的值进行递增</li>
</ul>
<h3 id="93继承"><a class="markdownIt-Anchor" href="#93继承"></a> 9.3继承</h3>
<blockquote>
<p>一个类继承另一个类时，将自动获得另一个类的所有属性和方法：<code>父类</code>-&gt;<code>子类</code><br />
子类继承了父类的所有属性和方法，还可以定义自己的属性和方法。</p>
</blockquote>
<p>子类方法的__init__()方法：需要先设置父类的属性：</p>
<pre><code>class Car(object):
	def __init__(self, *xxx):
		pass
class Necar(Car):
	def __init__(self, *xxx):
		super().__init__(*xxx)
</code></pre>
<p>继承之后，可以定义子类的属性和方法，并且可以重写父类的方法，<strong>要与父类方法重名</strong><br />
当了解了类的之后，在考虑问题是后就需要考虑属性的归属，要根据具体的业务分析编写代码，每种建模思想都没有错只是有效率高低之分，要从实践中总结。</p>
<h3 id="94导入类"><a class="markdownIt-Anchor" href="#94导入类"></a> 9.4导入类</h3>
<blockquote>
<p>类可以保存在模块中，然后在需要的时候导入到程序中</p>
</blockquote>
<pre><code>from a import A #导入一个类
from a impoert A,B #导入模块中多个类		
import a #导入整个模块
from a import b #一个模块中导入另一个模块
</code></pre>
<p>自定义工作流程:<code>先开始让代码尽可能简单---确保功能正常后提取功能模块，进行模块独立-----进行模块和文件交互</code></p>
<p>类中的特殊方法：</p>
<ul>
<li>_<em>init</em>_(self,)构造函数</li>
<li>_<em>new</em>_(slef)通常用于创建不可变数据类型的子类</li>
<li>_<em>del</em>_(self)析构函数</li>
<li>_<em>str</em>_(self)可打印字符串表示</li>
<li>_<em>repr</em>_(self)</li>
<li>_<em>unicode</em>_(self)</li>
<li>_<em>call</em>_(self)可调用的实例</li>
<li>_<em>nonzero</em>_(self)对对象定义false值</li>
<li>_<em>len</em>_(self)</li>
<li>_<em>cmp</em>_(self)对象比较</li>
<li>_<em>lt</em>_(self)</li>
<li>_<em>le</em>_(self)</li>
<li>_<em>gt</em>_(self)</li>
<li>_<em>ge</em>_(self)</li>
<li>_<em>eq</em>_(self)</li>
<li>_<em>getattr</em>_(self)</li>
<li>_<em>setattr</em>_(self)</li>
<li>_<em>delattr</em>_(self)</li>
<li>_<em>get</em>_(self)</li>
<li>_<em>set</em>_(self)</li>
<li>_<em>delete</em>_(self)</li>
<li>_<em>iter</em>_(self)创建迭代器类</li>
<li>_<em>hash</em>_(self)散列函数值</li>
</ul>
<h2 id="十-文件和异常"><a class="markdownIt-Anchor" href="#十-文件和异常"></a> 十、文件和异常</h2>
<blockquote>
<p>异常：python创建的特殊对象，用于管理程序运行时出现的错误，让程序在面对错误的数据室更健壮。</p>
</blockquote>
<h3 id="101文件读写"><a class="markdownIt-Anchor" href="#101文件读写"></a> 10.1文件读写</h3>
<p>打开模式：</p>
<ul>
<li>
<p>t默认文本格式打开</p>
</li>
<li>
<p>x写模式新建一个文件，如果已经存在会报错。</p>
</li>
<li>
<p>b二进制模式</p>
</li>
<li>
<p>+打开一个文件可读可写</p>
</li>
<li>
<p>r只读，从头开始</p>
</li>
<li>
<p>rb</p>
</li>
<li>
<p>r+从开头开始可读可写</p>
</li>
<li>
<p>rb+</p>
</li>
<li>
<p>w文件不存在会创建文件，如果存在则从头开始写，原内容删除</p>
</li>
<li>
<p>w+</p>
</li>
<li>
<p>wb</p>
</li>
<li>
<p>wb+</p>
</li>
<li>
<p>a如果文件不存在则会创建文件，如果存在则会追加进行写入</p>
</li>
<li>
<p>ab</p>
</li>
<li>
<p>a+</p>
</li>
<li>
<p>ab+</p>
</li>
<li>
<p>相对路径：一般是当前文件夹内的文件</p>
</li>
<li>
<p>绝对路径：制定文件夹内的文件</p>
<pre><code>  with open(datafile) as file:  
  '''打开文件读取，并自动关闭'''  
  	data = file.read()
  	print(data)
</code></pre>
</li>
<li>
<p>写入write()</p>
</li>
<li>
<p>打开文件时可以传入第二个参数，来确定打开的文件操作形式 r：可读 r+：可读写 w+：写到文件末尾 a:附加到文件</p>
</li>
<li>
<p>主义写入时如果文件不存在会自动生成一个新文件，如果存在设定是w模式时，会自动清除对象文件重新写入。</p>
</li>
<li>
<p>读取read():返回文件内容readline()：读取一行文件内容，并记录读取位置readlines()：读取每行返回一个列表</p>
</li>
</ul>
<p>文件对象方法和数据属性：</p>
<ul>
<li>f.close()</li>
<li>f.fileno()</li>
<li>f.flush()</li>
<li>f.isatty()</li>
<li>f.read()</li>
<li>f.readline()</li>
<li>f.readlines()</li>
<li>f.seek(off,whence=0)移动到指定位置，第一个参数为偏移量。whence中的0表示从开头开始，为1时表示从当前位置开始，2表示从文件末尾开始。</li>
<li>f.tell()返回file内的当前值</li>
<li>f.truncate()截断file。默认为当前位置</li>
<li>f.write()</li>
<li>f.writelines(seq)向文件中写入序列，如果需要换行需要在序列中存在。</li>
<li>f.closed布尔类型</li>
<li>f.encoding返回编码类型</li>
<li>f.mode返回打开模式</li>
<li>f.name返回文件名称</li>
<li>f.newlines如果读取到行分隔符则为None</li>
</ul>
<h3 id="102异常"><a class="markdownIt-Anchor" href="#102异常"></a> 10.2异常</h3>
<blockquote>
<p>异常是使用try-except代码块来处理的,通过将可能引发错误的代码放进代码块中，可以提高抵御崩溃的能力</p>
</blockquote>
<pre><code>try:
	pass
except XxxError:
	pass
else:
	pass
</code></pre>
<p>上面的大致原理是，python尝试执行try中的代码，有一些try代码执行成功的信息放在else中,except告诉程序try中代码执行不成功时应该怎么做。</p>
<h3 id="103存储数据"><a class="markdownIt-Anchor" href="#103存储数据"></a> 10.3存储数据</h3>
<blockquote>
<p>json：是一种数据存储格式，并且会保存数据结构。</p>
</blockquote>
<ul>
<li>json.dump()存储</li>
<li>json.load()加载</li>
</ul>
<h3 id="104重构"><a class="markdownIt-Anchor" href="#104重构"></a> 10.4重构</h3>
<blockquote>
<p>重构将代码进行改进，使代码更清晰、容易扩展。<br />
将功能代码分成几个小的或者函数进行实现</p>
</blockquote>
<h2 id="十一-测试"><a class="markdownIt-Anchor" href="#十一-测试"></a> 十一、测试</h2>
<p><strong>待续</strong></p>

      </section>
      <section class="extra">
        
        <ul class="copyright">
  
  <li><strong>本文作者：</strong>Alex</li>
  <li><strong>本文链接：</strong><a href="https://cxpeng.cn/archives/8409c1ac.html">https://cxpeng.cn/archives/8409c1ac.html</a></li>
  <li><strong>版权声明：</strong>本博客所有文章均采用<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"
      rel="external nofollow" target="_blank"> BY-NC-SA </a>许可协议，转载请注明出处！</li>
  
</ul>
        
        
        <section class="donate">
  <div class="qrcode">
    <img   class="lazyload" data-original="https://pic.izhaoo.com/alipay.jpg" src="" >
  </div>
  <div class="icon">
    <a href="javascript:;" target="_blank" rel="noopener" id="alipay"><i class="iconfont iconalipay"></i></a>
    <a href="javascript:;" target="_blank" rel="noopener" id="wechat"><i class="iconfont iconwechat-fill"></i></a>
  </div>
</section>
        
        
  <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/Python/" rel="tag">Python</a></li></ul>

        
<nav class="nav">
  
    <a href="/archives/270bf2b5.html"><i class="iconfont iconleft"></i>PYTHON编程：从入门到实践之数据可视化</a>
  
  
    <a href="/archives/e5d37995.html">航空公司客户价值分析<i class="iconfont iconright"></i></a>
  
</nav>

      </section>
      
      <section class="comments">
  
  <div class="btn" id="comments-btn">查看评论</div>
  
  
</section>
      
    </section>
  </div>
</article>
  </div>
</main>
  <footer class="footer">
  <div class="footer-social">
    
    
    
    
    
    <a href="tencent://message/?Menu=yes&uin=894519210 " target="_blank" onMouseOver="this.style.color= '#12B7F5'"
      onMouseOut="this.style.color='#33333D'">
      <i class="iconfont footer-social-item  iconQQ "></i>
    </a>
    
    
    
    
    
    <a href="javascript:; " target="_blank" onMouseOver="this.style.color= '#09BB07'"
      onMouseOut="this.style.color='#33333D'">
      <i class="iconfont footer-social-item  iconwechat-fill "></i>
    </a>
    
    
    
    
    
    <a href="https://www.instagram.com/izhaoo/ " target="_blank" onMouseOver="this.style.color= '#DA2E76'"
      onMouseOut="this.style.color='#33333D'">
      <i class="iconfont footer-social-item  iconinstagram "></i>
    </a>
    
    
    
    
    
    <a href="https://github.com/izhaoo " target="_blank" onMouseOver="this.style.color= '#24292E'"
      onMouseOut="this.style.color='#33333D'">
      <i class="iconfont footer-social-item  icongithub-fill "></i>
    </a>
    
    
    
    
    
    <a href="mailto:izhaoo@163.com " target="_blank" onMouseOver="this.style.color='#FFBE5B'"
      onMouseOut="this.style.color='#33333D'">
      <i class="iconfont footer-social-item  iconmail"></i>
    </a>
    
  </div>
  <div class="footer-copyright"><p>Powered by <a target="_blank" href="https://hexo.io">Hexo</a>  |  Theme - <a target="_blank" href="https://github.com/izhaoo/hexo-theme-zhaoo">zhaoo</a></p></div>
</footer>
  
      <div class="fab fab-plus">
    <i class="iconfont iconplus"></i>
  </div>
  
  <div class="fab fab-daovoice">
    <i class="iconfont iconcomment"></i>
  </div>
  
  <div class="fab fab-up">
    <i class="iconfont iconcaret-up"></i>
  </div>
  
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>




<script src="https://cdn.bootcdn.net/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script>




<script src="https://cdn.bootcss.com/fancybox/3.5.7/jquery.fancybox.min.js"></script>




<script src="/js/utils.js"></script>
<script src="/js/modules.js"></script>
<script src="/js/zui.js"></script>
<script src="/js/script.js"></script>




<script>
  (function (i, s, o, g, r, a, m) {
    i["DaoVoiceObject"] = r;
    i[r] = i[r] || function () {
      (i[r].q = i[r].q || []).push(arguments)
    }, i[r].l = 1 * new Date();
    a = s.createElement(o), m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    a.charset = "utf-8";
    m.parentNode.insertBefore(a, m)
  })(window, document, "script", ('https:' == document.location.protocol ? 'https:' : 'http:') +
    "//widget.daovoice.io/widget/0f81ff2f.js", "daovoice")
  daovoice('init', {
    app_id: "abcdefg"
  }, {
    launcher: {
      disableLauncherIcon: true,
    },
  });
  daovoice('update');
</script>



<script>
  (function () {
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
      bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
    } else {
      bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
  })();
</script>


<script>
  var _hmt = _hmt || [];
  (function () {
    var hm = document.createElement("script");
    hm.src = "https://hm.baidu.com/hm.js?4c204d8bc027a0455b5fc642ac334ca8";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(hm, s);
  })();
</script>










</html>